<?php

/**
 * Access_AuthObject - Classe d'autorisation et de communication avec le serveur maître
 *
 * @package
 * @author Alexis Eric, 
 * Erra Prod. http://www.erraprod.com
 * @copyright Copyright (c) 2012 - Erra Prod
 * @access public
 */
class Access_AuthObject extends Erra_Fields_Base_Object {

    public static function forceUpdates() {
        ob_start();
        post_curl(config_get('root_server') . '/json/get_update_list', array('serial_to_validate' => config_get('serial')));
        $update_list = ob_get_contents();
        ob_end_clean();
        $updateCandidates = json_decode($update_list, true);
        $updateList = array();
        $current_version = Config_GeneralConfigObject::get('version');
        foreach ($updateCandidates as $updateCandidate) {
            if ($updateCandidate > $current_version && ($updateCandidate[3] == 6 || ($updateCandidate[3] == 7 && config_get('allow_debug_updates')))) {
                $updateList[] = $updateCandidate;
            }
        }
        asort($updateList);
        $updateList = count($updateList) ? json_encode($updateList) : '""';
        $res = '<script type="text/javascript">';
        $res .= '$(document).ready(function() {';
        $res .= "function ajaxUpdate(index, updateList) {
    erraShowSuccess('Mise à jour en cours, veuillez patienter...');
    preventAction();
    update_target = updateList[index];
    ajax(WEBROOT + '/getdata/update_to', {
        'update_target': update_target
    }, function(data) {
        $('#update_infos').html('');
        erraHideSuccess();
        allowAction();
        alert_jqueryui_ok(getRest(data)['message'], function() {
            if (index + 1 < updateList.length) {
                ajaxUpdate(index + 1, updateList);
            } else {
                location.reload();
            }
        });

    });
}
function auto_updater(updateList) {
    if (updateList.length) {
        var index = 0;
        ajaxUpdate(index, updateList);
    }
} 
                auto_updater(" . $updateList . ")
             });";
        $res .= '</script>';

        return $res;
    }

    /**
     * Retourne le host HTTP du serveur
     * @return type
     */
    public static function getBaseURL() {
        return $_SERVER['HTTP_HOST'];
    }

    /**
     * getServerInfos() - Calcule les informations du serveur afin de remonter au serveur maître l'identité 
     * du serveur sur lequel est installé MSA
     * @return type
     */
    public static function getServerInfos() {
        return $_SERVER['SERVER_ADDR'] . ':' . $_SERVER['SERVER_PORT'] . '@' . $_SERVER['HTTP_HOST'];
    }

    /**
     * authenticate() - Authentifie l'application et met dans la variable globale  $licence_object les informations relatives à la licence
     * @global type $licence_object
     */
    public static function authenticate() {
        global $licence_object;
        if (!is_object($licence_object)) {
            ob_start();
            post_curl(config_get('root_server') . '/json/validate', array('serial_to_validate' => config_get('serial'), 'ip' => self::getServerInfos(), 'num_agendas' => Msa_AgendaObject::getAgendaCount()));
            $licenceObject = ob_get_contents();
            ob_end_clean();
            $result = Erra_Core_DatabasePdo::SELECT('SELECT COUNT(*) AS num_agendas FROM msa_agendaobject');
            if (is_object($result)) {
                $result = $result->fetch();
                $used_agendas = $result->num_agendas;
            } else {
                $used_agendas = 10000000; // Si on ne peut pas récuperer le nombre d'agendas, on inscript un nombre très elevé pour être sur que le produit ne se lancera pas
            }
            // Si la licence est bien validée, on inscrit le nombre d'agendas restants à partir d'un calcul
            if (!is_numeric($licenceObject)) {
                $licenceObject = json_decode($licenceObject);
                $licence_object = $licenceObject;
                $licence_object->remaining_agendas = $licence_object->max_agendas - $used_agendas;
            } else {
                $licence_object = null;
            }
        }
    }

}
